// 这里封装和登录相关的异步action请求

import { ApiRes, LoginForm, Token } from '@/types/data'
import { RootAction, RootThunkAction } from '@/types/store'
import http from '@/utils/request'
import { setToken } from '@/utils/token'

// 登录请求函数  login()
export const login = (values: LoginForm): RootThunkAction => {
  // fn(store.diaptch, store.getState, xxxx)
  return async (dispatch) => {
    const res = await http.post<ApiRes<Token>>('/authorizations', values)
    console.log(res.data.data)
    // dispatch(同步action)

    // 1.存储到仓库
    dispatch({
      type: 'login/login',
      payload: res.data.data,
    } as RootAction)

    // 2.存储到本地
    setToken(res.data.data)
  }
}

// 以后不管你的异步action函数是否需要传参，都会封装一个函数， 函数调用得到异步action
// action creator 是个函数 为了得到 同步/异步 action

// 发送验证码
export function getCode(mobile: string): RootThunkAction {
  return async (dispatch) => {
    await http.get(`/sms/codes/${mobile}`)
    // 这边没有返回验证码 也不需要存数据。。。
  }
}
